package com.pingan.demospringevent.service;

import com.pingan.demospringevent.UserRegisterEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Service;

/**
 * 再定义一个用户注册服务(事件发布者)。
 *
 * 需要注意的是，服务必须交给 Spring 容器托管。
 * ApplicationEventPublisherAware 是由 Spring 提供的用于为 Service 注入 ApplicationEventPublisher 事件发布器的接口，
 * 使用这个接口，我们自己的 Service 就拥有了发布事件的能力。用户注册后，不再是显示调用其他的业务 Service，而是发布一个用户注册事件。
 * 创建邮件服务，积分服务，其他服务(事件订阅者)等。
 *
 */
@Service
public class UserService implements ApplicationEventPublisherAware {

    private ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }

    public void register(String name) {
        System.out.println("用户：" + name + " 已注册！");
        //用户一注册之后，就发布一个注册事件。 然后各个监听者做出相应的动作
        //孩子一醒之后，就发布一个哭 事件，然后各个监听者做出相应的动作
        applicationEventPublisher.publishEvent(new UserRegisterEvent(name));
    }



}
